//
//  CKCycleView.m
//  CycleScrollViewDemo
//
//  Created by lanou3g on 16/4/19.
//  Copyright © 2016年 zlw. All rights reserved.
//

#import "CKCycleView.h"

@interface CKCycleView ()<UIScrollViewDelegate>
/**
 *  ScrollView
 */
@property (nonatomic, strong) UIScrollView *imgScrollView;

/**
 *  pageControl
 */
@property (nonatomic, strong) UIPageControl *imgPageControl;

/**
 *  ImageViewArray
 */
@property (nonatomic, strong) NSMutableArray *imgViewArray;

/**
 *  存放图片的数组
 */
@property (nonatomic, strong) NSMutableArray *imgArray;
/**
 *  当前展示的图片的下标
 */
@property (nonatomic, assign) NSInteger index;
/**
 *  定时器
 */
@property (nonatomic, strong) NSTimer *imgTimer;

/**
 *  点击回调 block
 */
@property (nonatomic, copy) void(^tapBlock)(NSInteger index);

/**
 *  时间间隔的属性
 */
@property (nonatomic, assign)NSTimeInterval interval;

@end

@implementation CKCycleView

/*
// Only override drawRect: if you perform custom drawing. 只有重写绘制矩形:如果你执行自定义画。
// An empty implementation adversely affects performance during animation.一个空的在动画实现性能造成不利影响。
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

- (instancetype)initWithFrame:(CGRect)frame interVal:(NSTimeInterval)interval
{
    self = [super initWithFrame:frame];
    if (self) {
        self.imgArray = [NSMutableArray new];
        self.imgViewArray = [NSMutableArray new];
        self.imgScrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
        self.imgScrollView.contentSize = CGSizeMake(frame.size.width * 3, frame.size.height);
        [self addSubview:self.imgScrollView];
        
        for (int i = 0; i < 3; i++) {
            UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(frame.size.width * i, 0, frame.size.width, frame.size.height)];
            //添加到父视图
            [self.imgScrollView addSubview:imgView];
            [self.imgViewArray addObject:imgView];
            self.imgScrollView.pagingEnabled = YES;
            self.imgScrollView.showsHorizontalScrollIndicator = NO;
            self.imgScrollView.delegate = self;
           
        }
#pragma mark 定义一个 NStimer
        self.interval = interval;
        
    }
    return self;
}
//图案滚动方法
- (void)timerAction
{
    [self.imgScrollView setContentOffset:CGPointMake(self.imgScrollView.frame.size.width * 2, 0) animated:YES];
    //改变 index
    self.index = (self.index + 1) % self.imgNameArray.count;
//    [self layoutImages];
}
//滚动动画结束
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    /**
     *  回位
     */
    [self.imgScrollView setContentOffset:CGPointMake(scrollView.frame.size.width, 0) animated:NO];
    [self layoutImages];
}

//图片名数组setter
- (void)setImgNameArray:(NSMutableArray *)imgNameArray
{
    if (_imgNameArray != imgNameArray) {
        _imgNameArray = imgNameArray;
        //设置 pageControl
        [self.imgPageControl removeFromSuperview];
        self.imgPageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height-40, self.frame.size.width, 40)];
        [self addSubview:self.imgPageControl];
        
        //属性
        self.imgPageControl.currentPage = 0;
        self.imgPageControl.numberOfPages = _imgNameArray.count;
        self.imgPageControl.enabled = NO;
         self.imgPageControl.currentPageIndicatorTintColor = [UIColor redColor];
         self.imgPageControl.pageIndicatorTintColor = [UIColor orangeColor];
        
        for (int i = 0; i<imgNameArray.count; i++) {
            UIImage *img = [UIImage imageNamed:imgNameArray[i]];
            [self.imgArray addObject:img];
            if (i < 3) {
                [self.imgViewArray[i] setImage:img];
            }
        }
        //设置当前偏移量
        [self.imgScrollView setContentOffset:CGPointMake(self.frame.size.width, 0)animated:NO];
        self.index = 0 ;
        [self layoutImages];
        
        //点击手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapCycleViewAction:)];
        [(UIImageView *)self.imgViewArray[1] addGestureRecognizer:tap];
        [(UIImageView *)self.imgViewArray[1] setUserInteractionEnabled:YES];
    }
    if (_interval <= 0) {
        self.imgTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
    }else
    {
        self.imgTimer = [NSTimer scheduledTimerWithTimeInterval:_interval target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
    }

}
//点击手势的方法
-(void)tapCycleViewAction:(UITapGestureRecognizer *)tap
{
    if (self.tapBlock) {
        self.tapBlock(self.index);
    }
}

#pragma makr  UIScrollViewDelegate
static CGFloat x = 0;
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    x = scrollView.contentOffset.x;
    [self.imgTimer setFireDate:[NSDate distantFuture]];// 延时结束
   //[self.imgTimer invalidate];//不能用这个,用的话必须重新创建 NStimer
}

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    if (x > scrollView.contentOffset.x) {
        [self panToleft:NO Index:self.index];
    }else if (x < scrollView.contentOffset.x)
    {
      [self panToleft:YES Index:self.index];
    }
    [self.imgTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:3]];
    
}

#pragma mark  向左滑动,向右滑动切换
- (void)panToleft:(BOOL)left Index:(NSInteger)index
{
    if (!left) {
        self.index = (index - 1 + self.imgNameArray.count) % self.imgNameArray.count;
    }else
    {
        self.index = (index + 1) % self.imgNameArray.count;
    }
    //切换图片
    [self layoutImages];
    //回位操作
    [self.imgScrollView setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
    
}
//切换图片
- (void)layoutImages
{
    for (int i = 0;i < 3; i++) {
        [self.imgViewArray[i] setImage:self.imgArray[(self.index - 1 + i + self.imgNameArray.count) % self.imgNameArray.count]];
    }
}
//重写 index 的 setter 的方法
- (void)setIndex:(NSInteger)index
{
    if (_index != index) {
        _index = index;
        self.imgPageControl.currentPage = index;
    }
  
}

//添加block 回调
- (void)addTapBlock:(void (^)(NSInteger))block
{
    
    self.tapBlock = block;
}


@end
